﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using TPDiseño.DTO_s;
using TPDiseño.Clases_de_Entidad;
using TPDiseño.Clases_de_Control;
using TPDiseño.Clases_de_Entidad;

namespace TPDiseño.Interfaces
{
    public partial class Principal : Form
    {

        // Atributos
        //-----------------------------------------------------------------------------------------------
        private Gestor_Evaluacion miGestor_Evaluacion;

        // Interfaces
        private EvaluarCand0 evaluarCandidatoPaso1;
        private EvaluarCand1 evaluarCandidatoPaso2;
        private EvaluarCand2 evaluarCandidatoPaso3;
        
        // Elementos transitorios
        private List<DTOCandidatoResult> candidatosSeleccionados;
        private List<DTOCandidatoClave>  candidatosClaves;
        private Puesto puestoParaEvaluar;
        public Cuestionario cuesti = new Cuestionario();
        public Principal()
        {
            // Inicializa componentes, usado por el VS para generar la interfaz
            InitializeComponent();

            // Inicializo

        }

        private void salirToolStripMenuItem_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void ordenDeMéritoToolStripMenuItem_Click(object sender, EventArgs e)
        {
            EmitirOrden orden = new EmitirOrden();
            orden.MdiParent = this; 
            orden.Show();
            this.WindowState = FormWindowState.Maximized;
            
        }

        private void evaluarCandidatosToolStripMenuItem_Click(object sender, EventArgs e)
        {
            //[Incompleto Mejorar] 
            evaluarCandidatoPaso1 = new EvaluarCand0();
            evaluarCandidatoPaso1.MdiParent = this;

            // Agrego el metodo que va atender el evento
            evaluarCandidatoPaso1.terminar += new FinishEventHandler(terminoEvaluarCandidatoPaso1);
            evaluarCandidatoPaso1.Show();

            this.WindowState = FormWindowState.Maximized;
        }

        private void Principal_Load(object sender, EventArgs e)
        {
            //
            //cerrarSesiónToolStripMenuItem.Enabled = false;
            candidatoToolStripMenuItem.Enabled = false;
            consultorToolStripMenuItem.Enabled = false; 
            Ingresar ingreso = new Ingresar();
            ingreso.MdiParent = this;
            ingreso.Show();
        }

        private void realizarCuestionarioToolStripMenuItem_Click(object sender, EventArgs e)
        {
       
        }

        private void puestosToolStripMenuItem_Click(object sender, EventArgs e)
        {
            GestionarP gp = new GestionarP();
            gp.MdiParent = this;
            gp.Show();
            this.WindowState = FormWindowState.Maximized;
        }

        private void cerrarSesiónToolStripMenuItem_Click(object sender, EventArgs e)
        {
            string val;
            val = MessageBox.Show("¿Está seguro que desea cerrar sesión? Se perderán todos sus datos no guardados", "Cerrar Sesión", MessageBoxButtons.YesNo, MessageBoxIcon.Information).ToString();
            if (val == "Yes")
            {
                if (ActiveMdiChild != null)
                {
                    ActiveMdiChild.Close();
                }
                candidatoToolStripMenuItem.Enabled = false;
                consultorToolStripMenuItem.Enabled = false;
                Ingresar ingresar = new Ingresar();
                ingresar.MdiParent = Principal.ActiveForm;
                ingresar.Show();
            }
        }

        private void terminoEvaluarCandidatoPaso1(object sender, System.EventArgs e)
        {
            // Retengo la salida de la interfaz del Paso 1 del CU EvaluarCand
            DTOCandidatoResultArgumentos obj = (DTOCandidatoResultArgumentos)e;
            candidatosSeleccionados = obj.DtoCandidatoResult;
            //________________________________________________________________________________________________________
            //            
            // Cierro la ventana del paso que termino (paso 1)
            evaluarCandidatoPaso1.Close();            
            // Invoco el paso siguiente, Paso 2 del CU Evaluar Candidato
            evaluarCandidatoPaso2 = new EvaluarCand1();
            evaluarCandidatoPaso2.MdiParent = this;
            // Agrego el metodo que va atender el evento
            evaluarCandidatoPaso2.terminar += new FinishEvaluarCand1EventHandler(terminoEvaluarCandidatoPaso2);
            // Muestro el paso 2
            evaluarCandidatoPaso2.Show();
            
            Console.WriteLine("Termino EvaluarCandidatoPaso1");
        }
        
        private void terminoEvaluarCandidatoPaso2(object sender, System.EventArgs e)
        {
            // Retengo la salida de la interfaz del Paso 1 del CU EvaluarCand
            DTOPuestoSeleccionadoArgumentos obj = (DTOPuestoSeleccionadoArgumentos)e;
            puestoParaEvaluar = obj.Puesto;
            //________________________________________________________________________________________________________
            //            
            // Cierro la ventana del paso que termino (paso 1)
            evaluarCandidatoPaso2.Close(); 
            // Invoco el paso siguiente, Paso 2 del CU Evaluar Candidato
            evaluarCandidatoPaso3 = new EvaluarCand2(candidatosSeleccionados);
            evaluarCandidatoPaso3.MdiParent = this;
            // Agrego el metodo que va atender el evento
            evaluarCandidatoPaso3.terminar += new FinishEvaluarCand2EventHandler(terminoEvaluarCandidatoPaso3);
            evaluarCandidatoPaso3.exportarEvento += new ExportarEvaluarCand2EventHandler(exportar);
            // Muestro el paso 3
            evaluarCandidatoPaso3.Show();

            Console.WriteLine("Termino EvaluarCandidatoPaso2");
        }
        private void terminoEvaluarCandidatoPaso3(object sender, System.EventArgs e)
        {
            // Retengo la salida de la interfaz del Paso 1 del CU EvaluarCand
            DTOCandidatoClaveArgumento obj = (DTOCandidatoClaveArgumento)e;
            candidatosClaves = obj.CandidatosClaves;
            //________________________________________________________________________________________________________
            //            

            // Cursor de trabajo en proceso
            Cursor.Current = Cursors.WaitCursor;
            
            //--------------------------------------------------------------------------------------------------------------------------------
            miGestor_Evaluacion = new Gestor_Evaluacion();
            Evaluacion evaluacionLista = miGestor_Evaluacion.evaluar(puestoParaEvaluar, candidatosClaves, puestoParaEvaluar._competenciasPonderadas);

            miGestor_Evaluacion.guardar(evaluacionLista);
            //--------------------------------------------------------------------------------------------------------------------------------

            // Cierro la ventana del paso que termino (paso 1)
            evaluarCandidatoPaso3.Close();

            // Cursor normal, ya termine el trabajo 
            Cursor.Current = Cursors.Default;

            // Mensaje re retroalimentacion (fin evaluacion)
            MessageBox.Show("Se ha creado correctamente la evaluación para el puesto " + puestoParaEvaluar._nombre, "Evaluación Finalizada", MessageBoxButtons.OK);

            Console.WriteLine("Termino EvaluarCandidatoPaso3");
        }


        private void exportar(object sender, System.EventArgs e)
        {
            // Retengo la grilla de la interfaz del Paso 3 del CU EvaluarCand, para exportar los resultados
            CandidatosClavesParaExportarArgumentos obj = (CandidatosClavesParaExportarArgumentos)e;
            //________________________________________________________________________________________________________
            //            
            
            // Oculto la ventana del paso que termino (paso 1)
            evaluarCandidatoPaso3.Visible = false;
            
            // Cursor de trabajo en proceso
            Cursor.Current = Cursors.WaitCursor;
            
            // Formateo el nombre del archivo.. 
            System.IO.FileInfo f = new System.IO.FileInfo(obj.RutaDeExportacion      + "\\" + 
                                                          System.DateTime.Now.Year   + "-" + 
                                                          System.DateTime.Now.Month  + "-" + 
                                                          System.DateTime.Now.Day    + "-" + 
                                                          System.DateTime.Now.Hour   + "-" + 
                                                          System.DateTime.Now.Minute + "-" +
                                                          puestoParaEvaluar._nombre  + ".xls"
                                                          );
            // Invoco la funcion para exporta a exel
            Funciones.ExportarAexel(f.FullName, "Candidatos", obj.GrillaCandidatosClaves);

            // Cursor normal, ya termine el trabajo 
            Cursor.Current = Cursors.Default;  
            
            Console.WriteLine("Exporto resultados a exel");
        }

        private void consultorToolStripMenuItem_Click(object sender, EventArgs e)
        {

        }

    }
}
